¿Qué diferencias prácticas hay entre `canActivate`, `canActivateChild`, `canMatch` y un guard funcional?

¿Qué diferencias prácticas hay entre `canActivate`, `canActivateChild`, `canMatch` y un guard funcional? en Angular: criterios sobre enrutamiento y guards, e...

3 min de lecturaIntermedio
Media EnrutamientoGuardsAutorización

Detrás de "¿Qué diferencias prácticas hay entre canActivate, canActivateChild, canMatch y un guard funcional?" suele haber una tensión real en Angular entre enrutamiento y guards.

En un nivel intermedio interesa ver si colocas bien los límites de "Qué diferencias prácticas hay entre canActivate, canActivateChild, canMatch y un guard funcional", justificas por qué eliges ese patrón y explicas cómo lo mantendrías legible para el equipo.

Qué evalúa el entrevistador

  • Si distingues qué parte de "Qué diferencias prácticas hay entre canActivate, canActivateChild, canMatch y un guard funcional" pertenece a enrutamiento y cuál debería resolverse en guards.
  • Si conviertes la respuesta en criterios observables: límites claros, impacto en el mantenimiento y forma de detectar regresiones.
  • Si modelas bien contratos, errores, reintentos, autenticación o cancelación sin dejar huecos entre capas.

Respuesta sólida

  • Aterriza el contrato: qué entra, qué sale, qué errores se traducen, qué tiempos esperas y qué política sigues para cancelar o reintentar.
  • Explica dónde pondrías la lógica de transformación para no propagar dependencias externas por todo el sistema.
  • Incluye cómo protegerías el flujo ante respuestas parciales, estados inconsistentes y credenciales mal gestionadas.

Compromisos y errores comunes

  • Acoplar directamente la UI o el dominio al formato exacto del proveedor externo multiplica el coste de cambio.
  • Los reintentos ciegos, la traducción pobre de errores y la ausencia de timeouts suelen empeorar la incidencia en lugar de contenerla.

Ejemplo de código

Un ejemplo pequeño ayuda a ver dónde colocarías la lógica de enrutamiento en "Qué diferencias prácticas hay entre canActivate, canActivateChild, canMatch y un guard funcional" y qué parte dejarías derivada o encapsulada.

import { HttpInterceptorFn } from '@angular/common/http';
import { catchError, throwError } from 'rxjs';

export const authInterceptor: HttpInterceptorFn = (request, next) => {
  const authenticatedRequest = request.clone({
    setHeaders: { Authorization: 'Bearer token-demo' },
  });

  return next(authenticatedRequest).pipe(
    catchError((error) => {
      console.error('Error HTTP', error.status);
      return throwError(() => error);
    }),
  );
};

Lo importante no es la API concreta, sino que la solución hace visible la fuente de verdad, el tratamiento del error y el punto exacto donde enrutamiento se sincroniza con guards dentro de "Qué diferencias prácticas hay entre canActivate, canActivateChild, canMatch y un guard funcional" en Angular.

Ejemplo o caso real

Un caso creíble para "¿Qué diferencias prácticas hay entre canActivate, canActivateChild, canMatch y un guard funcional?" aparece cuando una funcionalidad de Angular mezcla enrutamiento con guards y el equipo empieza a tocar demasiados puntos para un cambio pequeño. Ahí conviene probar la solución sobre una pantalla o flujo acotado, medir si reduce fricción y solo después extender el patrón.

Frase corta de entrevista

Si una decisión de Angular no mejora claridad, coste de cambio o fiabilidad, probablemente aún no merece existir.

¿Completaste esta sección?

Marcarla como leída actualiza tu progreso.